#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//#include <QDateTime>
#include <QMainWindow>
#include <QSerialPort>
#include <QString>

#include "networkdebugging.h"//页面2头文件
#include "gpsdata.h"


#include <QTcpSocket>
#include <QTcpServer>
#include <QUdpSocket> // 添加UDP套接字头文件
#include <QDoubleValidator>


/*
// 定义GPS数据结构体
struct GpsData
{
    double longitude;  // 经度
    double latitude;   // 纬度
    QDateTime time;    // 接收时间
    bool isValid; // 新增有效性标志
};*/



QT_BEGIN_NAMESPACE
namespace Ui
{
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    networkDebugging *ppage2 = NULL;//用来保存页面2的实例化对象地址
    QTcpServer *tcpServer; // TCP服务器
    QTcpSocket *tcpSocket; // TCP套接字
    QUdpSocket *udpSocket; // UDP套接字

    // 新增：用于在串口接收区显示数据的方法
    void appendTotextEditRev(const QString &data);

    // 添加这个方法
    QSerialPort* getSerialPort() { return serialPort; }

    // 新增方法：直接返回串口是否打开
    bool isSerialPortOpen()
    {
        return (serialPort && serialPort->isOpen());
    }

    // 声明用于追加文本的成员函数
    void appendToTextEditRev(const QString &data);
private slots:
    void on_btnCloseOrOpenSerial_clicked();

    void on_btnSendContext_clicked();

    void on_SerialData_readyToRead();

    //void on_btnCloseOrOpenSerial_clicked(bool checked);


    void on_btnrevClear_clicked();

    void on_btnrevSave_clicked();

    void on_ClearHistory_clicked();

    void time_reflash();

    void on_Analysis_clicked();

    void on_SendOutUDP_clicked();

    void on_SendOutTCP_clicked();


    //void sendGpsDataAsAscii(const GpsData &data, QSerialPort* targetSerial);

    void on_AddPoint_clicked();

    void on_ClearPoint_clicked();

protected:
    void paintEvent(QPaintEvent *event) override;


private:
    Ui::MainWindow *ui;
    QSerialPort *serialPort;
    int writeCntTotal;
    int readCntTotal;
    QString  sendBak;
    QString myTime;
    bool serialStatus;
    QTimer *timer;
    QUdpSocket *udpReceiver;
    void getSysTime();

    GpsData parseSerialData(const QByteArray &data);
    // 新增：获取目标IP和端口
    QString getTargetIp();
    quint16 getTargetPort();


    void initUdpReceiver();
    void onUdpDataReceived();
    quint16 udpListenPort=8888;   // UDP监听端口（新增）

    QVector<QPointF> coordinates;
    QDoubleValidator *latitudeValidator;
    QDoubleValidator *longitudeValidator;

    // 坐标范围
    double minLatitude = -90;
    double maxLatitude = 90;
    double minLongitude = -180;
    double maxLongitude = 180;



    // 将经纬度转换为屏幕坐标
    QPointF latLngToScreen(const QPointF &latLng);

};
#endif // MAINWINDOW_H
